博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(五)SpringMVC之使用Kaptcha实现验证码功能
阅读量:5941 次
发布时间:2019-06-19

本文共 5826 字,大约阅读时间需要 19 分钟。

 

一、什么是Kaptcha

Kaptcha是Google开发的用于自动生成验证码的插件。

 

二、怎么导入Kaptcha

① 如果没有用Maven管理工具的话就直接导入包(可以直接下载:pau8)

https://pan.baidu.com/s/11225kEsyIFPntYQF9lT2-A

② 用Maven的话,有两个地址可以用,一个是Google那边的,一个是把搬到Github上的

com.google.code.kaptcha
kaptcha
2.3
com.github.penggle
kaptcha
2.3.2

 

三、页面的代码

 

四、写在配置数据库的springX.xml文件中的kaptcha的参数信息

138
28
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
4
no
105,179,50
1
black
25
楷体
black
8
com.google.code.kaptcha.impl.Shadow

具体的参数信息(参考其他网站的):

Constant 描述 默认值
kaptcha.border 图片边框,合法值:yes , no yes
kaptcha.border.color 边框颜色,合法值: r,g,b (and optional alpha) 或者 white,black,blue. black
kaptcha.border.thickness 边框厚度,合法值:>0 1
kaptcha.image.width 图片宽 200
kaptcha.image.height 图片高 50
kaptcha.producer.impl 图片实现类 com.google.code.kaptcha.impl.DefaultKaptcha
kaptcha.textproducer.impl 文本实现类 com.google.code.kaptcha.text.impl.DefaultTextCreator
kaptcha.textproducer.char.string 文本集合,验证码值从此集合中获取 abcde2345678gfynmnpwx
kaptcha.textproducer.char.length 验证码长度 5
kaptcha.textproducer.font.names 字体 Arial, Courier
kaptcha.textproducer.font.size 字体大小 40px.
kaptcha.textproducer.font.color 字体颜色,合法值: r,g,b 或者 white,black,blue. black
kaptcha.textproducer.char.space 文字间隔 2
kaptcha.noise.impl 干扰实现类 com.google.code.kaptcha.impl.DefaultNoise
kaptcha.noise.color 干扰颜色,合法值: r,g,b 或者 white,black,blue. black
kaptcha.obscurificator.impl 图片样式: 水纹com.google.code.kaptcha.impl.WaterRipple 鱼眼com.google.code.kaptcha.impl.FishEyeGimpy 阴影com.google.code.kaptcha.impl.ShadowGimpy com.google.code.kaptcha.impl.WaterRipple
kaptcha.background.impl 背景实现类 com.google.code.kaptcha.impl.DefaultBackground
kaptcha.background.clear.from 背景颜色渐变,开始颜色 light grey
kaptcha.background.clear.to 背景颜色渐变,结束颜色 white
kaptcha.word.impl 文字渲染器 com.google.code.kaptcha.text.impl.DefaultWordRenderer
kaptcha.session.key session key KAPTCHA_SESSION_KEY
kaptcha.session.date session date KAPTCHA_SESSION_DATE

 

五、在Controller中对kaptcher做出配置

//导入kaptcha实现得到验证码功能    private Producer kaptchaProducer = null;    @Autowired    public void setCaptchaProducer(Producer kaptchaProducer) {        this.kaptchaProducer = kaptchaProducer;    }
@RequestMapping(value="/login",method=RequestMethod.POST)    public String login(UserInfo u,Model model,HttpServletResponse response, HttpServletRequest request) throws UnsupportedEncodingException{        //获取设置好的验证码和待验证的验证码,如果验证成功就进行数据的操作,如果不对就直接刷新页面      String kaptchaCheck = (String) request.getSession().getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);        String kaptchaReceive = (String) request.getParameter("user_input_verifyCode");        if(kaptchaCheck!=null&&(kaptchaCheck.toUpperCase()).equals(kaptchaReceive.toUpperCase())) {            List
list = userInfoService.listUser(); for(UserInfo user:list) { if(u.getUserName().equals(user.getUserName())&&u.getPassword().equals(user.getPassword())) { model.addAttribute("user",user); if(request.getParameter("check")!=null) addCookie(u.getUserName(), u.getPassword(), response, request); return "index"; } } } return "login"; }
/**     * 利用Kaptcha插件来生成验证码     * @param request     * @param response     * @return     */    @RequestMapping("/kaptcha")      public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response){        //生成验证码的方法        response.setDateHeader("Expires",0);          response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");          response.addHeader("Cache-Control", "post-check=0, pre-check=0");          response.setHeader("Pragma", "no-cache");          response.setContentType("image/jpeg");          String capText = kaptchaProducer.createText();        request.getSession().setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);        BufferedImage bi = kaptchaProducer.createImage(capText);          ServletOutputStream out = null;        try {            out = response.getOutputStream();            ImageIO.write(bi, "jpg", out);        } catch (IOException e) {            e.printStackTrace();        }          try {              out.flush();          } catch (IOException e) {            e.printStackTrace();        } finally {              try {                out.close();            } catch (IOException e) {                e.printStackTrace();            }          }          return null;      }

效果:

 

转载于:https://www.cnblogs.com/NYfor2018/p/9360989.html

你可能感兴趣的文章
[考试]20151008
查看>>
perf-perf stat用户层代码分析
查看>>
OSI七层与TCP/IP五层网络架构详解
查看>>
(转载)equals与==
查看>>
shell
查看>>
Centos防火墙添加IP白名单
查看>>
LeetCode - Backspace String Compare
查看>>
namespace用法
查看>>
MySQL 5.7原生JSON格式支持
查看>>
[吴恩达机器学习笔记]14降维3-4PCA算法原理
查看>>
Solr分词
查看>>
二十四种设计模式:策略模式(Strategy Pattern)
查看>>
统计某个字符串中指定字符串出现的次数
查看>>
asp.net三层结构中,SQL助手类DbHelperSQL
查看>>
scala map和flatMap
查看>>
.Net Core下使用 RSA
查看>>
python 数据库中文乱码 Excel
查看>>
利用console控制台调试php代码
查看>>
递归算法,如何把list中父子类对象递归成树
查看>>
jsf初学解决GlassFish Server 无法启动
查看>>